package com.ft.javaio.nio;

import org.springframework.aop.ThrowsAdvice;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @Author RenPu
 * @Date 2023/7/18 11:35
 * @Version 1.0
 * @Description: 模拟多线程进行并发操作，FileChannel验证其多线程环境下的安全性
 *               在同一个JVM的进程下，多线程环境下是安全的
 **/
public class FileChannel_002 {



    public static void main(String[] args) throws Exception {

            //文件输出流
            FileOutputStream outputStream = new FileOutputStream("C:\\Users\\12795\\Desktop\\hello.txt");

            //获取文件输出流Channel对象
            FileChannel channel = outputStream.getChannel();


            for (int i = 0; i <10 ; i++) {
                new Thread(()->{
                    //创建buffer对象
                    ByteBuffer byteBuffer = ByteBuffer.wrap("my name is niu niu\n".getBytes());
                    //根据通道Channel。写入buffer存储的数据
                    try {
                        channel.write(byteBuffer);
                    } catch (Exception e) {
                        if(e instanceof IOException){
                            String message="当前文件只可共享，个人是无法进行修改的，请联系管理员进行授权后，再进行操作！！！！";
                            throw new RuntimeException(message);
                        }

                    }
                }).start();
            }

    }


}
